#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
  struct ListNode {
      int val;
      ListNode *next;
      ListNode() : val(0), next(nullptr) {}
      ListNode(int x) : val(x), next(nullptr) {}
      ListNode(int x, ListNode *next) : val(x), next(next) {}
  };
 
class Solution {
public:
    ListNode* swapPairs(ListNode* head)
    {
        if (head == nullptr || head->next == nullptr) return head;
        ListNode* newhead = new ListNode(-1, head);
        ListNode* prev = newhead, * slow = head, * fast = head->next;
        while (fast)
        {
            prev->next = fast;
            slow->next = fast->next;
            fast->next = slow;

            prev = slow;
            slow = slow->next;
            if (slow == nullptr) break;
            fast = slow->next;
        }
        return newhead->next;
    }
};